package com.young.springbootredisson.config;

import org.redisson.Redisson;
import org.redisson.api.RedissonClient;
import org.redisson.config.Config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.io.File;
import java.io.IOException;

/**
 * redisson配置，通过读取对应的 redisson 配置文件来完成配置，配置文件格式为 YML
 * 注意：在本项目中默认并不是采用这种方式进行配置的，而是使用springboot 自动配置来实现的，
 *      该实现方式由redisson官方提供的org.redisson.spring.starter.RedissonAutoConfiguration 类来完成
 */
//@Configuration
public class RedissonConfigFromYaml {

    /**
     * RedissonClient 单机模式配置
     *
     * @return redissonClient
     */
    @Bean
    public RedissonClient singleConfig() throws IOException {
        Config config = Config.fromYAML(new File("redisson-single.yml"));
        RedissonClient redisson = Redisson.create(config);
        return redisson;
    }

    /**
     * RedissonClient 哨兵模式配置
     *
     * @return redissonClient
     */
    @Bean
    public RedissonClient sentinelConfig() throws IOException {
        Config config = Config.fromYAML(new File("redisson-sentinel.yml"));
        RedissonClient redisson = Redisson.create(config);
        return redisson;
    }
    /**
     * RedissonClient 集群模式配置
     *
     * @return redissonClient
     */
    @Bean
    public RedissonClient clusterConfig() throws IOException {
        Config config = Config.fromYAML(new File("redisson-cluster.yml"));
        RedissonClient redisson = Redisson.create(config);
        return redisson;
    }
    /**
     * RedissonClient 复制模式配置
     *
     * @return redissonClient
     */
    @Bean
    public RedissonClient replicatedConfig() throws IOException {
        Config config = Config.fromYAML(new File("redisson-replicated.yml"));
        RedissonClient redisson = Redisson.create(config);
        return redisson;
    }
    /**
     * RedissonClient 主从模式配置
     *
     * @return redissonClient
     */
    @Bean
    public RedissonClient masterSlaveConfig() throws IOException {
        Config config = Config.fromYAML(new File("redisson-master-slave.yml"));
        RedissonClient redisson = Redisson.create(config);
        return redisson;
    }

    /**
     * RedissonClient 代理模式配置
     * 根据redisson github官网文档进行配置的，但是实际在这个版本里面没有 useProxyServers() 方法，待探索
     * @return redissonClient
     */
    @Bean
    public RedissonClient proxyConfig() throws IOException{
        Config config = Config.fromYAML(new File("redisson-proxy.yml"));
        RedissonClient redisson = Redisson.create(config);
        return redisson;
    }
}
